// package com.zzht.patrol.bp.calculate.utils;
//
// import cn.hutool.core.collection.CollUtil;
// import com.alibaba.fastjson.JSON;
// import com.alibaba.fastjson.JSONArray;
// import com.alibaba.fastjson.JSONObject;
// import com.rabbitmq.client.Channel;
// import com.zzht.bp.trace.model.Position;
// import org.apache.commons.lang3.StringUtils;
// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
// import org.springframework.amqp.core.Message;
//
// import java.io.IOException;
// import java.nio.charset.StandardCharsets;
// import java.util.ArrayList;
// import java.util.LinkedList;
// import java.util.List;
// import java.util.Map;
// import java.util.stream.Collectors;
//
// /**
//  * @ClassName Qin
//  * @Description TODO
//  * @Author a3889
//  * @Date 2022/6/21 16:05
//  **/
// public class RabbitMqMessageUtil {
//
//     private static final Logger log = LoggerFactory.getLogger(RabbitMqMessageUtil.class);
//
//     public static List<List<List<Position>>> messageToPosition(List<Message> messages, Channel channel, Boolean directAck) throws IOException {
//         List<List<List<Position>>> positionsGroup = new LinkedList<>();
//         List<Position> positions = new ArrayList<>();
//         for (Message message : messages) {
//             String msg = new String(message.getBody(), StandardCharsets.UTF_8);
//             if (directAck) {
//                 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//             }
//             if (StringUtils.isNotBlank(msg)) {
//                 try {
//                     JSONObject jsonObject = JSON.parseObject(msg);
//                     JSONArray data = jsonObject.getJSONArray("data");
//                     String id = jsonObject.getString("id");
//                     if (null != data && StringUtils.isNotBlank(id)) {
//                         positions.addAll(data.toJavaList(Position.class));
//                     }
//                 } catch (Exception e) {
//                     if (!directAck) {
//                         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//                     }
//                     log.error("rabbitMq message convert Json error：{}", msg, e);
//                 }
//             } else {
//                 if (!directAck) {
//                     channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//                 }
//             }
//         }
//         Map<Long, List<Position>> groupingPositionMap = positions.stream().collect(Collectors.groupingBy(Position::getUserId));
//         groupingPositionMap.forEach((userId, ps) -> {
//             List<Position> sorted = CollUtil.sort(ps, (o1, o2) -> cn.hutool.core.date.DateUtil.compare(o1.getGpsTime(), o2.getGpsTime()));
//             List<List<Position>> positionUser = new LinkedList<>();
//             positionUser.add(sorted);
//             positionsGroup.add(positionUser);
//         });
//         return positionsGroup;
//     }
//
// }
